import {BasePage, BasePageData} from "../common/core/BasePage";
import {DataLoader, field} from "../../modules/coreModule/data/DataLoader";
import {TradeIndexData, TradeStatus} from "../../modules/payModule/data/Trade";
import {page, pageFunc} from "../common/PageBuilder";
import {UserPage} from "../common/partPages/UserPage";
import {QueryPage} from "../common/partPages/QueryPage";
import {waitForLogin} from "../../modules/userModule/managers/UserManager";
import {PayInterface} from "../../modules/payModule/PayCommon";
import {pageMgr} from "../../modules/coreModule/managers/PageManager";
import {PayResultPage} from "../payResult/PayResultPage";

class Data extends BasePageData {

	@field([TradeIndexData])
	list: TradeIndexData[] = [];
	// @field([TradeIndexData])
	// paidList: TradeIndexData[] = [];
	// @field([TradeIndexData])
	// notPaidList: TradeIndexData[] = [];
	@field
	tabIdx: number = 0;

}

@page("payRecord", "支付记录")
export class PayRecordPage extends BasePage<Data> {

	public data = new Data();

	/**
	 * 部分页
	 */
	public userPage: UserPage = new UserPage();
	public queryPage: QueryPage =
		new QueryPage(this.loadData.bind(this));

	// // region 分页查询参数控制
	//
	// /**
	//  * 查询参数
	//  */
	// public queryParams = {
	// 	offset: 0, count: DefaultCount, filter: {}
	// }
	//
	// /**
	//  * 重置查询参数
	//  */
	// public resetQueryPage() {
	// 	this.queryParams.offset = 0;
	// 	this.queryParams.count = DefaultCount;
	// }
	//
	// /**
	//  * 切换到下一页
	//  */
	// public nextQueryPage() {
	// 	this.queryParams.offset += DefaultCount;
	// }
	//
	// /**
	//  * 切换到下一页
	//  */
	// public setQueryFilter(filter) {
	// 	this.queryParams.filter = filter;
	// }
	//
	// /**
	//  * 下拉刷新
	//  */
	// @pageFunc
	// private onPullDownRefresh() {
	// 	this.resetQueryPage();
	// 	this.refreshData().then();
	// 	return wx.stopPullDownRefresh();
	// }
	//
	// /**
	//  * 触底加载
	//  */
	// @pageFunc
	// private onReachBottom() {
	// 	this.nextQueryPage();
	// 	this.refreshData().then();
	// }
	//
	// // endregion

	onLoad(e) {
		super.onLoad(e);
		this.switchTab(0);
	}

	/**
	 * 读取数据
	 */
	@waitForLogin
	public async loadData(queryParams) {
		const res = await PayInterface.GetTrades({
			...queryParams
		})
		const list = res.trades?.map(
			t => DataLoader.load(TradeIndexData, t));

		return list && this.setData({list});
	}

	/**
	 * 切换Tab页
	 */
	public async switchTab(tabIdx) {
		await this.setData({tabIdx});

		this.queryPage.resetPage();
		this.queryPage.setFilter(this.data.tabIdx ?
			{status: TradeStatus.NotPaid} :
			{status: ["_.neq", TradeStatus.NotPaid]});
		this.queryPage.refresh();
	}

	// region 事件

	/**
	 * TODO: 点击显示详情
	 */
	@pageFunc
	public toDetail(e) {
		const id = e.currentTarget.dataset.id;
		pageMgr().push(PayResultPage, <any>{tradeId: id}).then();
	}

	/**
	 * tab切换
	 */
	@pageFunc
	public onTabChange(e) {
		this.switchTab(e.detail.index).then();
	}

	// endregion

	// /**
	//  * 更新paidList
	//  */
	// public updatePaidList() {
	// 	for(let x in this.data.list){
	// 		//判断当前项是否在paidList中
	// 		let flag: boolean = true;
	// 		for(let y in this.data.paidList){
	// 			if(this.data.paidList[y] == this.data.list[x]){
	// 				flag = false;
	// 				break;
	// 			}
	// 		}
	//
	// 		if(this.data.list[x].status == TradeStatus.Paid && flag) {
	// 			this.data.paidList.push(this.data.list[x]);
	// 		}
	// 	}
	//
	// 	this.setData({paidList: this.data.paidList});
	// }
	//
	// /**
	//  * 更新notPaidList
	//  */
	// public updateNotPaidList(){
	// 	for(let x in this.data.list){
	// 		//判断当前项是否在notPaidList中
	// 		let flag: boolean = true;
	// 		for(let y in this.data.notPaidList){
	// 			if(this.data.notPaidList[y] == this.data.list[x]){
	// 				flag = false;
	// 				break;
	// 			}
	// 		}
	//
	// 		if(this.data.list[x].status == TradeStatus.NotPaid && flag){
	// 			this.data.notPaidList.push(this.data.list[x]);
	// 		}
	// 	}
	//
	// 	this.setData({notPaidList: this.data.notPaidList});
	// }

	// /**
	//  * OnLoad回调，解决list高度问题以及加载list
	//  */
	// onLoad(e) {
	// 	super.onLoad(e);
	//
	// 	this.updatePaidList();
	// 	this.updateNotPaidList();
	// }
}
